package multimedia.uebung;

import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.TreeMap;


import multimedia.uebung.huffman.Huffman;


public class TestDCT {

	public static void main(String [] args){
		
		zeitMessung();
		
//		// ------------- Beispiel generieren zum Vergleichen ----------------------
//		int [][] testbild1 = new int[16][16];
//		
//		for(int y=0; y<testbild1.length; y++)
//		{
//			for(int x=0; x<testbild1[y].length;x++)
//			{
//				testbild1[y][x] = (x+y*8) % 256;
//			}
//		}
//		
//		writeToDisk(testbild1, "D:/datei1.txt");
//		int[][] testbild2 = testbild1.clone();
//		
//		DCT.transformLayer(testbild1, 1);
//		DCT.transformLayer(testbild1, 3);
//		writeToDisk(testbild1, "D:/datei2.txt");
//		
//		DCT.transformLayer(testbild2, 2);
//		DCT.transformLayer(testbild2, 3);
//		writeToDisk(testbild1, "D:/datei3.txt");
//		
		
	}	
	
	public static void printArray(int [][] array)
	{
		for(int i=0; i<array.length; i++)
		{
			for(int j=0; j<array[i].length; j++)
			{
				System.out.print(array[i][j] + " ");
			}
			System.out.println();
		}
	}
	
	public static void zeitMessung()
	{
		//Test Bild generieren
				int [][] testbild1 = new int[256][256];
				
				for(int y=0; y<testbild1.length; y++)
				{
					for(int x=0; x<testbild1[y].length;x++)
					{
						testbild1[y][x] = (x+y*8) % 256;
					}
				}
				
				int [][] testbild2 = testbild1.clone();
				
				//Zeitmessung Variante 1
				long start = System.currentTimeMillis();
				long ende = 0L;
				for(int i=0; i<30; i++)
				{
					DCT.transformLayer(testbild1, 1, Quantisierung.RandomMatrix);
				}
				ende = System.currentTimeMillis();
				System.out.println("Variante 1 (30 mal)");
				System.out.println("Zeit gesamt : " + (ende - start));
				System.out.println("Zeit durchschnittlich : " + (ende - start)/30);	
				
				DCT.transformLayer(testbild1, 3, Quantisierung.RandomMatrix);
				
				System.out.println("\n\n");
				//Zeitmessung Variante 2		
				
				start = System.currentTimeMillis();
				ende = 0L;
				for(int i=0; i<2000; i++)
				{
					DCT.transformLayer(testbild2, 2, Quantisierung.RandomMatrix);
				}
				ende = System.currentTimeMillis();
				System.out.println("Variante 2 (2000 mal)");
				System.out.println("Zeit gesamt : " + (ende - start));
				System.out.println("Zeit durchschnittlich : " + (ende - start)/2000);	
				
				
				DCT.transformLayer(testbild2, 3, Quantisierung.RandomMatrix);		
	}
	
	public static void writeToDisk(int [][] array, String filename)
	{
		try
		{
			//Deklarationen
			FileWriter fw_ref = new FileWriter(filename);
			
			for(int i=0; i<array.length; i++)
			{
				for(int j=0; j<array[i].length; j++)
				{
					fw_ref.write(array[i][j] + " ");
				}
				fw_ref.write("\n");
			}
			
			fw_ref.close();
		}
		catch(IOException e)
		{
			System.out.println("I/O Error.\n");
		}
	}//endmethod
	
}//end class StartEncoder